#ifndef __SINGLELINKList__H
#define __SINGLELINKList__H

//节点结构
template <typename T>
class Node
{
public:
    T _value;
    Node* _next;
public:
    Node() = default;
    Node(T value,Node *next):_value(value),_next(next){}
};
 
template <typename T>
class SingleLink
{
public:
    typedef Node<T>* poiter;
    SingleLink();
    ~SingleLink();
 
    int size();  //获取长度
    bool isEmpty();  //判空
    Node<T>* insert(int index,T t);  //在指定位置插入
    Node<T>* insert_head(T t);  //在链表头部插入
    Node<T>* insert_last(T t);  //在链表尾部进行插入
 
    Node<T>* del(int index);   //在指定位置进行删除
    Node<T>* delete_head();     //删除链表头
    Node<T>* delete_last();    //删除链表尾
 
    T get(int index);   //获取指定位置的元素
    T get_head();      //获取链表头元素
    T get_last();      //获取链表尾元素
 
    Node<T>* getHead();  //获取链表头节点
 
private:
    int count;
    Node<T>* phead;
 
private:
    Node<T>* getNode(int index);  //获取指定位置的节点
};


#endif